#include <BackgroundSubtractor/ipca.h>

BackgroundSubtractorIPCA::BackgroundSubtractorIPCA(int dims, const cv::Scalar& threshold)
:dims(dims),generator(BackgroundImageGeneratorIPCA(dims)),subtractor(BackgroundSubtractorRGBThresh(threshold)){
}

BackgroundSubtractorIPCA::~BackgroundSubtractorIPCA(){
}

BackgroundSubtractorIPCA::BackgroundSubtractorIPCA(const BackgroundSubtractorIPCA& other)
:generator(BackgroundImageGeneratorIPCA(other.dims)),subtractor(BackgroundSubtractorRGBThresh()){
	*this=other;
}

const BackgroundSubtractorIPCA& BackgroundSubtractorIPCA::operator=(const BackgroundSubtractorIPCA& other){
	this->generator=other.generator;
	this->subtractor=other.subtractor;
	return *this;
}

void BackgroundSubtractorIPCA::apply(const cv::Mat& src, cv::Mat& dst){
	generator.generate(src,temp);
	subtractor.setBGImage(temp);
	subtractor.apply(src,dst);
}

void BackgroundSubtractorIPCA::update(const cv::Mat& src){
	generator.update(src);
}

void BackgroundSubtractorIPCA::train(const std::vector<cv::Mat>& trainingset){
	for(std::vector<cv::Mat>::const_iterator it=trainingset.begin(); it!= trainingset.end(); it++)
		update(*it);
}
